Win::PowerShellにおけるWhichは"gcm |fl"
コマンドの場所さがしはつい'which'としてしまう.
が,PowerShellにwhichはない.で,調べたら,
つまりwhichの代わりは gcm (Get-Command)コマンドレットだが,単体だと詳細が隠れる ← PowerShellの悪点
⇒ ので,fl (Format-List)コマンドレットで整形するべし.
gcm <調べたいコマンド> |fl
でOK.
code:gcmとflの例
PS C:\Users\fujii> gcm wt |fl
Name : wt.exe
CommandType : Application
Definition : C:\Users\fujii\AppData\Local\Microsoft\WindowsApps\wt.exe
Extension : .exe
Path : C:\Users\fujii\AppData\Local\Microsoft\WindowsApps\wt.exe
FileVersionInfo : File: C:\Users\fujii\AppData\Local\Microsoft\WindowsApps\wt.exe
InternalName:
OriginalFilename:
FileVersion:
FileDescription:
Product:
ProductVersion:
Debug: False
Patched: False
PreRelease: False
PrivateBuild: False
SpecialBuild: False
Language:
これだと情報が多すぎるので,例えば "Path" だけを取り出したい場合は,grep の代わりに sls (Select-String)コマンドレット(aliasは 'sls' )?を使う.
gcm <command> | fl | sls -Pattern "Path"
→ が,2つのパイプを通すとうまく出力されない.
code:slsうまくいかない
PS C:\Users\fujii> gcm wt |fl | sls -Pattern "Path"
PS C:\Users\fujii> ← なにも出力されない
→ 一旦保存してから実行するとうまくいく.
code:sls保存ファイルには効く
PS C:\Users\fujii> gcm wt |fl > work
PS C:\Users\fujii> cat work | sls -Pattern "Path"
Path : C:\Users\fujii\AppData\Local\Microsoft\WindowsApps\wt.exe
※理由は…… fl の出力がオブジェクトとしてパイプに流されるため……らしい……うむ.
◆解決策 by Gemini
Select-Object --ExpandProperty を使えと.上の例だと,
gcm wt | Select-Object --ExpandProperty "Path"
やってみる.
code:gcmとSelect-Object
PS C:\Users\fujii> gcm wt | Select-Object -ExpandProperty "Path"
C:\Users\fujii\AppData\Local\Microsoft\WindowsApps\wt.exe
PS C:\Users\fujii>
おお.こっちが一番 which らしい☺.
※ちなみに,Select-Object のエイリアスは 'select' らしいが,selectをつかうとうまくいかない……なぜ……(T_T)
→ わからん……
◆ツボ
注意としては,sls と Select-Object の使い分け.
前のコマンドが吐き出す出力がオブジェクト → slsが効かない場合 → select で
前のコマンド出力がベタテキスト → sls で検索可能
◆今回のコマンドレット
gcm (Get-Command)
fl (Format-List)
sls (Select-String)
select (Select-Object) :select で使うと変になる(?)
今のところは以上.